package org.wlw;

public class TestAnimal {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.name = "旺财";
        d.run();
        d.type = "哈巴狗";
        /*
        * 多态的三个条件
        * 1、有继承
        * 2、有方法的覆盖
        * 3、有父类引用(指针)指向子类对象
        * */

        Animal d1 = new Dog();
        d1.name = "小黑";
        d1.run();
        //d1是父类引用，没有type，如果希望d1可以设置type，要进行强制类型转换
//        d1.type = "小狗";
        //将dd强制转换为Dog
        //对象的强制类型转换的条件是有多态特性存在，将一个父类引用转换为子类引用，此时可以调用子类的方法和属性
        Dog dd = (Dog)d1;
        dd.type = "小黄狗";
        dd.run();

        Cat c = new Cat();
    }
}

class Animal {
    String name;

    public void run() {
        System.out.println(name+"在跑步!");
    }
}

class Cat extends Animal {

}

class Dog extends Animal {
    String type;
    public void run() {
        System.out.println(name+"在摇着尾巴跑步!");
    }
}
